﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;
using iBank.Logica;

namespace iBank.Datos
{
    class DaoPersona
    {
        XmlTextReader lector = new XmlTextReader("Data.xml");

        public static List<Persona> leerXml()
        {
            List<Persona> listaPersonas = new List<Persona>();

            //Ruta del xml de nuestra base de datos
            String path = "Data.xml";
            
            //Abrimos(Filestream) y Cargamos(.Load) el archivo xml
            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            XmlDocument xmldoc = new XmlDocument();
            xmldoc.Load(fs);

            //Creamos una lista con los elementos "Persona" del xml
            XmlNodeList padreXml = xmldoc.GetElementsByTagName("Persona");
            
            for (int i = 0; i < padreXml.Count; i++)
            {
                    Persona nuevaPersona = new Persona();
                    XmlNodeList hijosXml = padreXml[i].ChildNodes;

                    //LLenamos los campos de la nueva persona
                    nuevaPersona.Nombre = hijosXml[0].InnerText;
                    nuevaPersona.Cedula = hijosXml[1].InnerText;
                    XmlNodeList tarjetasXml = hijosXml[2].ChildNodes;
                    List<Tarjeta> listaTarjetas = new List<Tarjeta>();

                    for (int k = 0; k < tarjetasXml.Count; k++)
                    {
                        Tarjeta nuevaTarjeta = new Tarjeta();
                        //Utilisamos el objeto xmlattributecolection porq esta es la que maneja los ID(Value) de otro modo retornaria null
                        XmlAttributeCollection tarjetasAttributes = tarjetasXml[k].Attributes;
                        nuevaTarjeta.Numero = tarjetasAttributes[0].Value;
                        

                        //Declaraciones de objetos para recorrer las cuentas de cada tarjeta
                        XmlNodeList cuentasXml = tarjetasXml[k].ChildNodes;
                        List<Cuenta> listaCuentas = new List<Cuenta>();

                        //Nos saltamos el primer elemento que es la clave siempre
                        nuevaTarjeta.Clave = cuentasXml[0].InnerText;
                        for (int z = 1; z < cuentasXml.Count; z++)
                        {
                            XmlAttributeCollection cuentasAttributes = cuentasXml[z].Attributes;
                            //Para las cuentas el primer numero del ID representa el tipo, 1 = Corriente 0 = Ahorro, el resto del numero es el numero de cuenta
                            //y el valor es el saldo de la cuenta
                            Cuenta nuevaCuenta = new Cuenta();
                            nuevaCuenta.Numero = cuentasAttributes[0].Value.Substring(1, 10);
                            nuevaCuenta.Saldo = int.Parse(cuentasXml[z].InnerText);

                            if(cuentasAttributes[0].Value.Substring(0,1).Equals("1"))
                                nuevaCuenta.Tipo = "Corriente";
                            else
                                nuevaCuenta.Tipo = "Ahorro";

                            listaCuentas.Add(nuevaCuenta);
                        }
                        nuevaTarjeta.ListaCuentas = listaCuentas;
                        listaTarjetas.Add(nuevaTarjeta);
                    }
                    nuevaPersona.ListaTarjetas = listaTarjetas;
                    listaPersonas.Add(nuevaPersona);
               // }
            }

            return listaPersonas;
        }

        public static void cambiarClaveXml(string tarjetaNumero, string clave)
        {
            //Ruta del xml de nuestra base de datos
            String path = "Data.xml";
            
            //Abrimos(Filestream) y Cargamos(.Load) el archivo xml
            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
            XmlDocument xmldoc = new XmlDocument();
            xmldoc.Load(fs);

            //Creamos una lista con los elementos "Persona" del xml
            XmlNodeList padreXml = xmldoc.GetElementsByTagName("Tarjeta");
           
            Console.WriteLine(padreXml[1].Value);
            for (int i_tarjeta = 0; i_tarjeta < padreXml.Count; i_tarjeta++ )
            {
                XmlAttributeCollection tarjetasAttributes = padreXml[i_tarjeta].Attributes;
                
                if (tarjetasAttributes[0].Value.Equals(tarjetaNumero))
                    padreXml[i_tarjeta].FirstChild.InnerText = clave;
                
            }

            FileStream fsxml = new FileStream(path, FileMode.Truncate, FileAccess.Write, FileShare.ReadWrite);

            xmldoc.Save(fsxml);
        }

    }
}

